package controlador;

import java.util.ArrayList;

import org.joda.time.LocalDate;

import dominio.Agencia;
import dominio.Empresa;
import dominio.Persona;

public class ClienteControlador {

	private ArrayList<Persona> personas;
	private ArrayList<Empresa> empresas;
	private ArrayList<Agencia> agencias;

	public ClienteControlador() {
		personas = new ArrayList<Persona>();
		empresas = new ArrayList<Empresa>();
		agencias = new ArrayList<Agencia>();
	}

	/* METODOS REFERENTES A EMPRESA */

	public Empresa registrarEmpresa(String codigo, String razonSocial,
			String identificacion, String telefono, String correo,
			String direccion, String ciudad, String estado, String pais,
			String nombreContacto, String metodoPago, String convenio) {
		Empresa empresa = new Empresa(codigo, razonSocial, identificacion,
				telefono, correo, direccion, ciudad, estado, pais,
				nombreContacto, metodoPago, convenio);
		empresas.add(empresa);
		return empresa;
	}

	public void modificarEmpresa(String codigo, String razonSocial,
			String identificacion, String telefono, String correo,
			String direccion, String ciudad, String estado, String pais,
			String nombreContacto, String metodoPago, String convenio) {

		Empresa empresa = obtenerEmpresaPorCodigo(codigo);
		empresa.setRazonSocial(razonSocial);
		empresa.setIdentificacion(identificacion);
		empresa.setTelefono(telefono);
		empresa.setCorreo(correo);
		empresa.setDireccion(direccion);
		empresa.setCiudad(ciudad);
		empresa.setEstado(estado);
		empresa.setPais(pais);
		empresa.setNombreContacto(nombreContacto);
		empresa.setMetodoPago(metodoPago);
		empresa.setConvenio(convenio);
	}

	public ArrayList<Empresa> devolverListaBusquedaEmpresasPorRazonSocial(
			String razonSocial) {

		ArrayList<Empresa> resultadoBusquedaEmpresas = new ArrayList<Empresa>();
		for (int i = 0; i < devolverCantidadEmpresas(); i++) {
			Empresa e = empresas.get(i);
			if (e.getRazonSocial().indexOf(razonSocial) > -1) {
				resultadoBusquedaEmpresas.add(e);
			}
		}
		return resultadoBusquedaEmpresas;
	}

	public void eliminarEmpresa(String codigo) {
		for (int i = 0; i < devolverCantidadEmpresas(); i++) {
			Empresa e = empresas.get(i);
			if (e.getCodigo().equals(codigo)) {
				empresas.remove(i);
			}
		}
	}

	public Empresa obtenerEmpresaPorCodigo(String codigo) {
		Empresa empresa = null;
		for (int i = 0; i < devolverCantidadEmpresas(); i++) {
			Empresa e = empresas.get(i);
			if (e.getCodigo().equals(codigo)) {
				empresa = e;
				break;
			}
		}
		return empresa;
	}

	public int devolverCantidadEmpresas() {
		return empresas.size();
	}

	public ArrayList<Empresa> devolverListaEmpresas() {
		return empresas;
	}

	/* METODOS REFERENTES A AGENCIA */

	public Agencia registrarAgencia(String codigo, String nombreAgencia,
			String identificacion, String telefono, String correo,
			String direccion, String ciudad, String estado, String pais,
			String nombreContacto) {
		Agencia agencia = new Agencia(codigo, nombreAgencia, identificacion,
				telefono, correo, direccion, ciudad, estado, pais,
				nombreContacto);
		agencias.add(agencia);
		return agencia;
	}

	public void modificarAgencia(String codigo, String nombreAgencia,
			String identificacion, String telefono, String correo,
			String direccion, String ciudad, String estado, String pais,
			String nombreContacto) {

		Agencia agencia = obtenerAgenciaPorCodigo(codigo);
		agencia.setNombreAgencia(nombreAgencia);
		agencia.setIdentificacion(identificacion);
		agencia.setTelefono(telefono);
		agencia.setCorreo(correo);
		agencia.setDireccion(direccion);
		agencia.setCiudad(ciudad);
		agencia.setEstado(estado);
		agencia.setPais(pais);
		agencia.setNombreContacto(nombreContacto);
	}

	public ArrayList<Agencia> devolverListaBusquedaAgenciasPorNombre(
			String nombre) {

		ArrayList<Agencia> resultadoBusquedaAgencias = new ArrayList<Agencia>();
		for (int i = 0; i < devolverCantidadAgencias(); i++) {
			Agencia a = agencias.get(i);
			if (a.getNombreAgencia().indexOf(nombre) > -1) {
				resultadoBusquedaAgencias.add(a);
			}
		}
		return resultadoBusquedaAgencias;
	}

	public void eliminarAgencia(String codigo) {
		for (int i = 0; i < devolverCantidadAgencias(); i++) {
			Agencia a = agencias.get(i);
			if (a.getCodigo().equals(codigo)) {
				agencias.remove(i);
			}
		}
	}

	public Agencia obtenerAgenciaPorCodigo(String codigo) {
		Agencia agencia = null;
		for (int i = 0; i < devolverCantidadAgencias(); i++) {
			Agencia a = agencias.get(i);
			if (a.getCodigo().equals(codigo)) {
				agencia = a;
				break;
			}
		}
		return agencia;
	}

	public int devolverCantidadAgencias() {
		return agencias.size();
	}

	public ArrayList<Agencia> devolverListaAgencias() {
		return agencias;
	}

	/* METODOS REFERENTES A PERSONA */

	public Persona registrarPersona(String codigo, String nombres,
			String apellidos, String pasaporte, String telefono, String sexo,
			String correo, String direccion, String ciudad, String estado,
			String pais, LocalDate fechaNacimiento, String comentarios) {
		Persona persona = new Persona(codigo, nombres, apellidos, pasaporte,
				telefono, sexo, correo, direccion, ciudad, estado, pais,
				fechaNacimiento, comentarios);
		personas.add(persona);
		return persona;
	}

	public void modificarPersona(String codigo, String nombres,
			String apellidos, String pasaporte, String telefono, String sexo,
			String correo, String direccion, String ciudad, String estado,
			String pais, LocalDate fechaNacimiento, String comentarios) {

		Persona persona = obtenerPersonaPorCodigo(codigo);
		persona.setNombres(nombres);
		persona.setApellidos(apellidos);
		persona.setPasaporte(pasaporte);
		persona.setTelefono(telefono);
		persona.setSexo(sexo);
		persona.setCorreo(correo);
		persona.setDireccion(direccion);
		persona.setCiudad(ciudad);
		persona.setEstado(estado);
		persona.setPais(pais);
		persona.setFechaNacimiento(fechaNacimiento);
		persona.setComentarios(comentarios);
	}

	public ArrayList<Persona> devolverListaBusquedaPersonasPorApellidos(
			String apellidos) {

		ArrayList<Persona> resultadoBusquedaPersonas = new ArrayList<Persona>();
		for (int i = 0; i < devolverCantidadPersonas(); i++) {
			Persona p = personas.get(i);
			if (p.getApellidos().indexOf(apellidos) > -1) {
				resultadoBusquedaPersonas.add(p);
			}
		}
		return resultadoBusquedaPersonas;
	}

	public void eliminarPersona(String codigo) {
		for (int i = 0; i < devolverCantidadPersonas(); i++) {
			Persona p = personas.get(i);
			if (p.getCodigo().equals(codigo)) {
				personas.remove(i);
			}
		}
	}

	public Persona obtenerPersonaPorCodigo(String codigo) {
		Persona persona = null;
		for (int i = 0; i < devolverCantidadPersonas(); i++) {
			Persona p = personas.get(i);
			if (p.getCodigo().equals(codigo)) {
				persona = p;
				break;
			}
		}
		return persona;
	}

	public int devolverCantidadPersonas() {
		return personas.size();
	}

	public ArrayList<Persona> devolverListaPersonas() {
		return personas;
	}

}